import os
from PIL import Image, ImageEnhance, ImageOps

def apply_scanner_effect(input_path, output_path, contrast_factor=1.5, brightness_factor=1.1, rotation_angle=0.5):
    """
    将一张图片处理成轻微的扫描件效果。

    :param input_path: 输入图片的文件路径
    :param output_path: 输出图片的文件路径
    :param contrast_factor: 对比度增强因子。大于1.0会增加对比度。
    :param brightness_factor: 亮度增强因子。大于1.0会增加亮度。
    :param rotation_angle: 轻微旋转的角度，用于模拟放置不正。
    """
    try:
        # 1. 打开图片
        with Image.open(input_path) as img:


            # 2. 转换为灰度图 (这是扫描件最常见的模式)
            # 如果想保留彩色，可以注释掉下面这行
            img = ImageOps.grayscale(img)

            # 3. 增强对比度
            enhancer_contrast = ImageEnhance.Contrast(img)
            img = enhancer_contrast.enhance(contrast_factor)


            # 4. 增强亮度
            enhancer_brightness = ImageEnhance.Brightness(img)
            img = enhancer_brightness.enhance(brightness_factor)


            # 5. 轻微旋转以增加真实感
            if rotation_angle != 0:
                # expand=True 可以防止旋转后图像被裁剪
                # fillcolor='white' 用白色填充旋转后产生的空白区域
                img = img.rotate(rotation_angle, resample=Image.BICUBIC, expand=True, fillcolor='white')
 

            # 6. 保存处理后的图片
            # 如果原始图片有alpha通道（如PNG），转换为RGB模式以确保可以保存为JPG
            if img.mode == 'RGBA' or img.mode == 'LA':
                img = img.convert('RGB')

            img.save(output_path, quality=95)
            print(f"处理完成！图片已保存至: {output_path}")

    except FileNotFoundError:
        print(f"错误：找不到文件 {input_path}")
    except Exception as e:
        print(f"处理图片时发生错误: {e}")

# --- 主程序入口 ---
if __name__ == "__main__":
    # --- 在这里修改你的文件路径和参数 ---

    # 输入你的原始照片路径
    # 在 Windows 上可能是 'C:\\Users\\YourUser\\Pictures\\my_photo.jpg'
    # 在 macOS 或 Linux 上可能是 '/home/user/pictures/my_photo.jpg'
    input_folder = "C:\\Users\\ASUS\\Desktop\\董达上传" 

    # 指定输出文件的路径
    output_folder  = "C:\\Users\\ASUS\\Desktop\\照片转录"

    # --- 调整扫描强度 ---
    # 你可以调整下面的参数来改变效果强度
    # contrast: 对比度，1.0为原图，建议值 1.5 - 2.5
    # brightness: 亮度，1.0为原图，建议值 1.1 - 1.3
    # angle: 旋转角度，0.5 度就足够了，设为 0 则不旋转
    
    # 调用函数进行处理
    for cd_1 in os.listdir(input_folder):
        if cd_1.lower().endswith(('.jpg')):

            apply_scanner_effect(
                os.path.join(input_folder,cd_1),
                os.path.join(output_folder,cd_1),
                contrast_factor=1.1,   # 轻微的对比度
                brightness_factor=1.1, # 轻微的亮度
                rotation_angle=0.5     # 轻微的旋转
            )

        else:
            if not os.path.exists(os.path.join(output_folder,cd_1)):
                os.makedirs(os.path.join(output_folder,cd_1))
            for cd_2 in os.listdir(os.path.join(input_folder,cd_1)):
                if cd_2.lower().endswith(('.jpg')):

                    apply_scanner_effect(
                        os.path.join(input_folder,cd_1,cd_2),
                        os.path.join(output_folder,cd_1,cd_2),
                        contrast_factor=1.5,   # 轻微的对比度
                        brightness_factor=1.1, # 轻微的亮度
                        rotation_angle=0.5     # 轻微的旋转
                    )

